/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import entity.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Tiago
 */
public class UsuarioDAO {

    private Connection connection;

    public UsuarioDAO() {
        this.connection = new ConnectionFactory().getConnection();
    }

    public Usuario login(String login, String senha) throws SQLException {
        String sql = "SELECT * FROM usuario WHERE login = ? AND senha = ?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setString(1, login);
        stmt.setString(2, senha);
        ResultSet rs = stmt.executeQuery();
        //if(rs == null) return null;
        Usuario user = new Usuario();
        while (rs.next()) {
            user.setIdUsuario(rs.getInt("idUsuario"));
            user.setNome(rs.getString("nome"));
            user.setCargo(rs.getString("cargo"));
            user.setNumMat(rs.getString("num_mat"));
            user.setEmail(rs.getString("email"));
            user.setSenha(rs.getString("senha"));
            user.setLogin(rs.getString("login"));
            user.setIdUsuario(rs.getInt("idUsuario"));
            
        }
        return user;
    }
    
        public boolean matExistente(String mat) throws SQLException{
        boolean resultado = false;
        String sql = "SELECT * FROM usuario WHERE num_mat=?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setString(1, mat);
        ResultSet rs = stmt.executeQuery();
        Usuario user = new Usuario();
        if(rs.next()){  
            resultado = true;  
        } 
        return resultado;
        } 
        
        public boolean loginExistente(String login) throws SQLException{
        boolean resultado = false;
        String sql = "SELECT * FROM usuario WHERE login=?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setString(1, login);
        ResultSet rs = stmt.executeQuery();
        Usuario user = new Usuario();
        if(rs.next()){  
            resultado = true;  
        } 
        return resultado;
        }         
        

    public void insere(Usuario usuario) {
        String sql = "INSERT INTO usuario (nome, cargo, num_mat, email, senha, login) VALUES (?,?,?,?,?,?)";
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, usuario.getNome());
            stmt.setString(2, usuario.getCargo());
            stmt.setString(3, usuario.getNumMat());
            stmt.setString(4, usuario.getEmail());
            stmt.setString(5, usuario.getSenha());
            stmt.setString(6, usuario.getLogin());
            stmt.executeUpdate();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public void altera(Usuario usuario) {
        String sql = "UPDATE usuario SET nome=?, cargo=?, num_mat=?, email=?, senha=?, login=? WHERE idUsuario = ?";
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, usuario.getNome());
            stmt.setString(2, usuario.getCargo());
            stmt.setString(3, usuario.getNumMat());
            stmt.setString(4, usuario.getEmail());
            stmt.setString(5, usuario.getSenha());
            stmt.setString(6, usuario.getLogin());
            stmt.executeUpdate();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public void excluir(Usuario usuario) {
        String sql = "DELETE FROM usuario WHERE idUsuario = ?";
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setInt(1, usuario.getIdUsuario());
            stmt.executeUpdate();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public List<Usuario> listar() throws SQLException {
        String sql = "SELECT * FROM usuario";
        List<Usuario> usuario = new ArrayList();
        PreparedStatement stmt = connection.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {
            Usuario user = new Usuario();
            user.setIdUsuario(rs.getInt("idUsuario"));
            user.setNome(rs.getString("nome"));
            user.setCargo(rs.getString("cargo"));
            user.setNumMat(rs.getString("num_mat"));
            user.setEmail(rs.getString("email"));
            user.setSenha(rs.getString("senha"));
            user.setLogin(rs.getString("login"));
            usuario.add(user);
        }
        return usuario;
    }

    public Usuario buscar_usuario(int idUser) throws SQLException {
        String sql = "SELECT * FROM usuario WHERE idUsuario=?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setInt(1, idUser);
        ResultSet rs = stmt.executeQuery();
        Usuario usuario = new Usuario();
        while (rs.next()) {
            usuario.setIdUsuario(rs.getInt("idUsuario"));
            usuario.setNome(rs.getString("nome"));
            usuario.setCargo(rs.getString("cargo"));
            usuario.setNumMat(rs.getString("num_mat"));
            usuario.setEmail(rs.getString("email"));
            usuario.setSenha(rs.getString("senha"));
            usuario.setLogin(rs.getString("login"));
        }
        return usuario;
    }

    public List<Usuario> procurar(String str) throws SQLException {
        String sql = "SELECT idUsuario, nome, cargo, num_mat, email, login FROM usuario WHERE nome LIKE ?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setString(1, "%" + str + "%");
        List<Usuario> usuario = new ArrayList();
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {
            Usuario user = new Usuario();
            user.setIdUsuario(rs.getInt("idUsuario"));
            user.setNome(rs.getString("nome"));
            user.setCargo(rs.getString("cargo"));
            user.setNumMat(rs.getString("num_mat"));
            user.setEmail(rs.getString("email"));
            user.setLogin(rs.getString("login"));
            usuario.add(user);
        }
        stmt.close();
        return usuario;
    }
}
